SQL-单行函数

字符函数

length(str) 获取 str 的字节个数
concat(str1,str2,strn) 拼接字符 str1,str2,strn
upper(str1)、lower(str1) 大小写转换
substr(str,num) 截取str字符长度从num开始的内容
instr(str,sub) 返回str中子串sub第一次出现的位置,若无该字串,返回0
trim( chars from str) 去掉str前后特定字符段chars,书写如 trim(str)时去掉空格
lpad(str,length,chars)【rpad】 使用char进行左【右】填充,使总长度为length。str超长时均从左侧开始截断
replace(str,sub,newsub) 使用 newsub 替换 str 中的 sub
  1. MYSQL 中,索引从 1 开始
  2. substr()存在多个重载,如 substr(str,num,length),截取Str从num开始length长度的字符
  • 简单函数使用示例
    1
    2
    3
    4
    5
    select rpad('Hellow_world',15,'!') As Game;
    #结果为 'Hellow_world!!!'

    select rpad('Hellow_world',6,'!') As Game;
    #结果为 'Hellow'

常见数学函数

round(num,n) 四舍五入保留n位,n缺省时为整数
ceil(num) 向上取整(>=num 的最小整数)
floor(num) 向下取整
truncate(num,n) 截断num,保留n位小数
mode(num1,num2) 求余,与num1%num2相同

数学函数基本与其他语言类似,不再做介绍

日期函数

now() 返回当前时间
curdate()【curtime()】 获取当前日期【时间】
year(date)【month()】 获取数据date中的年份【月份】信息,同样有day,hour,minute等
str_to_date(str,format) 按照format中格式对str进行解析获取日期(默认格式)
date_format(date,format) 按照format中格式,将格式转换为字符串
  1. 获取时间及日期基于当前系统时间
  2. format格式除关键字符外部分可自行定义
  • 简单示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #使用 str_to_date(str,format)
    #字符格式 年-日-月
    select str_to_date( '1998-25-2','%Y-%d-%c');
    #结果为 '1998-02-25'

    #使用 str_to_date(str,format)
    Use myemployees;
    select
    first_name,date_format(hiredate,'%m月/%d日 %Y年') As 入职日期
    from
    employees
    order by
    hiredate desc;
    #结果之一'Alberto', '12月/23日 2002年'

流程控制函数

if(a,b,c) 类似三元运算符 a?b:c;
case switch语句用法
case 多重if 语句用法
- `case`使用语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# switch用法
case expression
when const_value1 then value1/statement1 [;]
when const_value2 then value2/statement2 [;]
...
else value/statement [;]
end [case]

# 多重if用法
case
when condition1 then value1/statement1 [;]
when condition2 then value2/statement2 [;]
...
else value/statement [;]
end [case]

注意:

  1. 可搭配 select 作为查询表达式,此时when 后只能使用 值或表达式,不能使用语句。
  2. case 可单独使用,进行流程控制(仅限在begin-end中),此时语法需加上[]中内容,即 ;end case
  3. switch相当于等值判断,if相当于区间判断在mySQL语法上区别在于cass后是否有表达,when后的判断为值还是条件判断
  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #根据部门号,显示不同倍率的工资(switch用法)
    select salary,department_id,
    case department_id
    when 30 then salary*1.1
    when 40 then salary*1.2
    else salary
    end As `new salary`
    from employees;

    #工资范围,区分等级(if 用法)
    select last_name,salary,
    case
    when salary>=15000 then'A'
    when salary>=10000 then 'B'
    else 'C'
    end As `Grade`
    from employees;